import axios from 'axios-miniprogram';
import store from '@/store';

let baseUrl; // 根据不同的环境来配置不同的根路径
baseUrl = 'https://www.stally.cn/stock'; //  服务器的

// 每次都创建一个新的axios
const request = axios.create({
  baseURL: baseUrl,
  headers: {
    'Content-Type': 'application/json; charset=utf-8',
    'Cache-Control': 'no-cache'
  }
});

// 添加请求拦截器
request.interceptors.request.use(
  config => {
    uni.showLoading({
      title: '加载中'
    });
    config.timeout = 10000;
    // 在发送之前做些事,例如添加token
    // 最后需要将config 返回去
    // 如果已登录,且拿到了token，则设置token
    if (store.getters.token) {
      // console.log('设置token',store.getters.token)
      config.headers.Authorization = 'Bearer ' + store.getters.token;
    }
    return config;
  },
  err => {
    // 对请求错误的处理

    return Promise.reject(err);
  }
);

// 添加响应拦截器
request.interceptors.response.use(
  res => {
    uni.hideLoading();
    // 对响应成功的处理
    // 根据业务码来判断本次操作是否成功
    const { data } = res;
    if (data.code === 400) {
      // 无权限，清除本地信息，尝试微信登录,微信登录失败会自动跳转到绑定页面
      uni.clearStorageSync('token');
      store.dispatch('logOut');
      uni.showToast({
        title: '登录信息已失效，请重新登录',
        icon: 'none'
      });
      uni.navigateTo({
        url: '/pages/login/login'
      });
    } else if (data.code !== 200) {
      // 非0则是操作错误
      uni.showToast({
        title: `${data.message}`,
        icon: 'none'
      });
      return Promise.reject(data);
    } else {
      return data;
    }
  },
  err => {
    uni.hideLoading();
    // 对响应错误的处理
    // 返回401则无权限，跳转到登录页
    if (err.response && err.response.status === 401) {
      // 无权限，尝试微信登录
      uni.showToast({
        title: '登录已失效，正在尝试重新登录',
        icon: 'none'
      });
      uni.clearStorageSync('token');
      store.dispatch('loginByWxReq');
    }
    return Promise.reject(err);
  }
);
export default request;
